<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Vue自定义指令</title>
<script src="vue.js"></script>
<style> 

</style>
</head>
<body>
<pre>
钩子

钩子函数
	指令定义函数提供了几个钩子函数（可选）：
	bind: 只调用一次，指令第一次绑定到元素时调用，用这个钩子函数可以定义一个在绑定时执行一次的初始化动作。
	inserted: 被绑定元素插入父节点时调用（父节点存在即可调用，不必存在于 document 中）。
	update: 被绑定元素所在的模板更新时调用，而不论绑定值是否变化。通过比较更新前后的绑定值，可以忽略不必要的模板更新（详细的钩子函数参数见下）。
	componentUpdated: 被绑定元素所在模板完成一次更新周期时调用。
	unbind: 只调用一次， 指令与元素解绑时调用。

钩子函数参数
	钩子函数的参数有：
	el: 指令所绑定的元素，可以用来直接操作 DOM 。
	binding: 一个对象，包含以下属性：
	name: 指令名，不包括 v- 前缀。
	value: 指令的绑定值， 例如： v-my-directive="1 + 1", value 的值是 2。
	oldValue: 指令绑定的前一个值，仅在 update 和 componentUpdated 钩子中可用。无论值是否改变都可用。
	expression: 绑定值的表达式或变量名。 例如 v-my-directive="1 + 1" ， expression 的值是 "1 + 1"。
	arg: 传给指令的参数。例如 v-my-directive:foo， arg 的值是 "foo"。
	modifiers: 一个包含修饰符的对象。 例如： v-my-directive.foo.bar, 修饰符对象 modifiers 的值是 { foo: true, bar: true }。
	vnode: Vue 编译生成的虚拟节点。
	oldVnode: 上一个虚拟节点，仅在 update 和 componentUpdated 钩子中可用
	
--------------------------------------------------------------
</pre>
  
<div id="myapp">
		全局自定义聚焦指令v-focus:&nbsp; :&nbsp;<input v-focus/>
		<br/>局部自定义聚焦指令v-focusa: <input v-focusa/>
		<br/><div id="app"  v-runoob:hello.a.b="message"></div>
		<br/><br/>自定义指令赋值:<label v-mydirect="{text:'自定义指令',color:'green'}"></label>
</div>


<script>
//注册一个全局自定义指令v-focus
Vue.directive('focus',{
	//当绑定元素插入到DOM中
	inserted:function(ele){
		ele.focus();
	}
})

Vue.directive('runoob', {
  bind: function (el, binding, vnode) {
    var s = JSON.stringify
    el.innerHTML =
      'name: '       + s(binding.name) + '<br>' +
      'value: '      + s(binding.value) + '<br>' +
      'expression: ' + s(binding.expression) + '<br>' +
      'argument: '   + s(binding.arg) + '<br>' +
      'modifiers: '  + s(binding.modifiers) + '<br>' +
      'vnode keys: ' + Object.keys(vnode).join(', ')
  }
})


//不需要bind和insert等钩子函数
Vue.directive('mydirect',function(el,binding){
		el.innerHTML = binding.value.text
		el.style.backgroundColor = binding.value.color
})

var vm = new Vue({
	el:"#myapp",
	//局部自定义指令
	directives:{
		focusa:{
			inserted:function(ele){
				ele.focus();
			}
		}
		
	},
	data:{
		message:"vue学习"
	}
})
</script>
</body>
</html>